package com.yunpeng.aidevice.dao.service;

import com.yunpeng.aidevice.common.dto.save.MerchantSaveDTO;
import com.yunpeng.aidevice.common.vo.AppUpdateInfoVO;
import com.yunpeng.aidevice.dao.model.entity.MerchantDO;

import java.time.LocalDateTime;
import java.util.List;

/**
 * IMerchantService
 *
 * @author : Moore(hemw)
 * @date : 2020-04-28
 */
public interface IMerchantService {
    /**
     * 新增商户
     *
     * @param merchantSaveDTO
     * @param operatorCode
     * @return
     */
    Boolean addMerchant(MerchantSaveDTO merchantSaveDTO, String operatorCode);

    /**
     * 更新商户信息
     *
     * @param merchantSaveDTO 商户保存信息
     * @param operatorCode    操作人代码
     * @return
     */
    Boolean modify(MerchantSaveDTO merchantSaveDTO, String operatorCode);

    /**
     * 更新有效期
     *
     * @param merchantCode
     * @param tenantCode
     * @param operatorCode
     * @param dateTime
     * @return
     */
    Boolean updateInvalidDate(String merchantCode, String tenantCode, String operatorCode, LocalDateTime dateTime);

    /**
     * 根据租户获取商户列表（2000）
     *
     * @param tenantCode
     * @return
     */
    List<MerchantDO> getByTenant(String tenantCode);

    /**
     * 根据代码获取商户对象
     *
     * @param code       商户代码
     * @param tenantCode 租户代码
     * @return
     */
    MerchantDO getByCode(String code, String tenantCode);

    /**
     * 禁用启用商户
     *
     * @param disable
     * @param merchantCode
     * @param tenantCode
     * @param operatorCode
     * @return
     */
    Boolean enableDisableMerchant(Boolean disable, String merchantCode, String tenantCode, String operatorCode);

    /**
     * 设置app更新时间
     *
     * @param startTime
     * @param endTime
     * @param merchantCode
     * @param tenantCode
     * @param operatorCode
     * @return
     */
    Boolean updateAppUpdateTime(Short startTime, Short endTime, String merchantCode, String tenantCode, String operatorCode);

    /**
     * 获取商户app更新设定信息
     * 优先使用商户设定的时间，不存在则返回全局配置
     *
     * @param merchantCode
     * @param tenantCode
     * @return
     */
    AppUpdateInfoVO getAppUpdateInfoVO(String merchantCode, String tenantCode);
}
